package edu.wpi.first.wpilibj.templates;

import edu.wpi.first.wpilibj.DriverStationLCD;

// Authors: Kylie and Carly and Neutrino

public class RobotMap {

    // WARNING: do not use digital channel 1. There is a systemic problem
    // with using channel 1.
    
    //Make the constructor private, so no one can instantiate this class
    private RobotMap() {
    }

    //Joystick ports
    public static final int
            LEFT_DRIVE_JOYSTICK = 1,
            RIGHT_DRIVE_JOYSTICK = 2,
            SECOND_DRIVER_JOYSTICK = 3;
    
    //Driver joysticks' buttons
    public static final int
            PUSHER_DOWNER_EXTEND = 1,
            PUSHER_DOWNER_RETRACT = 3,
            
            DUMPER_UP_BUTTON = 1,
            DUMPER_DOWN_BUTTON = 3;
    
    //Operator joystick buttons
    public static final int
            BOTH_ARM_UP_SLOW = 1,
            
            RIGHT_ARM_UP = 4,
            RIGHT_ARM_DOWN = 6,
            LEFT_ARM_UP = 3,
            LEFT_ARM_DOWN = 5,
            BOTH_ARMS_UP = 9,
            BOTH_ARMS_DOWN = 8;
           
    //Print locations for arm limit switch values
    public static final DriverStationLCD.Line
            LIMIT_SWITCH_LINE_TOPLEFT = DriverStationLCD.Line.kUser1,
            LIMIT_SWITCH_LINE_TOPRIGHT = DriverStationLCD.Line.kUser2,
            LIMIT_SWITCH_LINE_BOTTOMLEFT = DriverStationLCD.Line.kUser3,
            LIMIT_SWITCH_LINE_BOTTOMRIGHT = DriverStationLCD.Line.kUser4,
            
            LIMIT_SWITCH_SANITY_LINE = DriverStationLCD.Line.kUser5,
            RAO_SWITCH_LINE = DriverStationLCD.Line.kUser5;
    
    //For motors
    //PWM connections on Digital I/O
    public static final int
            LEFT_DRIVE_MOTOR = 4,
            RIGHT_DRIVE_MOTOR = 3,
            
            PUSHER_DOWNER_MOTOR = 5,
            DUMPER_MOTOR = 1,
            
            ARM_MOTOR_LEFT = 2,
            ARM_MOTOR_RIGHT = 6;
    
    //Digital channels on Digital I/O
    public static final int
            DRIVE_ENCODER_LEFTA = 12,
            DRIVE_ENCODER_LEFTB = 11,
            DRIVE_ENCODER_RIGHTA = 10,
            DRIVE_ENCODER_RIGHTB = 13,
            
            PUSHER_DOWNER_LIMIT_SWITCH_TOP = 5, // check this
            PUSHER_DOWNER_LIMIT_SWITCH_BOTTOM = 7,
    
            ARM_LIMIT_SWITCH_TOPR = 8, 
            ARM_LIMIT_SWITCH_BOTTOMR = 6,
            ARM_LIMIT_SWITCH_TOPL = 9,
            ARM_LIMIT_SWITCH_BOTTOML = 3,
    
            LIMIT_SWITCH_SANITY = 4;
    
    //Pneumatics
    public static final int
            //Digital I/O channels
            PRESSURE_SWITCH_CHANNEL = 2, //Digital switch channel
            COMPRESSOR_RELAY_CHANNEL = 2, //Relay channel
            
            //If solenoids connected to NI 9472 on cRIO
            SOLENOID_MODULE = 1, //cRIO Module (usually 1)
            DRIVE_CHANNEL = 7, //Breakout board channel
            LOW_DUMPER_CHANNEL = 8, //Breakout board channel
            DUMPER_FRONT_FLAP_CHANNEL = 6, //Breakout board channel
            
            //If solenoids connected to Spike Relays
            LOW_DUMPER_RELAY = 3, //Relay channsel
            FRONT_FLAP_RELAY = 4; //Relay channel
}